Cloud Build で Conditional Step
以前のステップでファイルに書いて参照する
code:cloudbuild.yaml
steps:
- name: bash
script: |
set -e
CHOICES=("A" "B" "C")
INDEX=$(( $(od -An -N2 -i /dev/urandom) % 3 ))
echo "$CHOICE" > /workspace/choice.txt
echo "choice: $CHOICE"
- name: bash
script: |
set -e
CHOICE=$(cat /workspace/choice.txt)
case $CHOICE in
"A") echo "A" ;;
"B") echo "B" ;;
"C") echo "C" ;;
*) echo "Invalid choice" ;;
esac
複数の値を扱いたいときは環境変数のように書いて source すれば簡単
code:cloudbuild.envlike.yaml
steps:
- name: bash
script: |
set -e
CHOICES=("A" "B" "C")
INDEX=$(( RANDOM % 3 ))
echo "CHOICE=$CHOICE" > /workspace/env-vars.sh
echo "TIMESTAMP=$(date +%s)" >> /workspace/env-vars.sh
cat /workspace/env-vars.sh
- name: bash
script: |
set -e
source /workspace/env-vars.sh
case $CHOICE in
"A") echo "Alice" ;;
"B") echo "Bob" ;;
"C") echo "Charlie" ;;
esac
CURRENT_TIMESTAMP=$(date +%s)
DIFF=$(( CURRENT_TIMESTAMP - TIMESTAMP ))
echo "it took $DIFF seconds"
失敗しても進む
シェルで || exit 0 する
code:exit-0.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
entrypoint: 'bash'
args:
- '-c'
- |
docker pull gcr.io/$PROJECT_ID/IMAGE_NAME:latest || exit 0 別のビルドをトリガする
ステップの中から gcloud コマンドで別の cloudbuild.yaml を push する試み
条件が揃えばデプロイする、デプロイは複雑だし単体実行もしたいので別の yaml で定義、みたいなのができるはず